﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Runtime.Serialization;
using System.Web.Script.Serialization;
using System.Data.SqlClient;
using CMD_WEB.DAL;
using Newtonsoft.Json;

namespace CMD.BAL.SOL
{
    [DataContractAttribute]
    public class UpsertSolicitudWeb
    {
        [DataMemberAttribute(EmitDefaultValue = false)]
        public string unidSolicitud;
        
        public Dictionary<string, string> parametros;
        public static string UpsertWeb(string unidSolicitud)
        {
            string mensaje = "";
            DataSet result = new DataSet();
            SqlCommand sp = new SqlCommand("SP_CMD_UPSERT_SOL");
            sp.CommandType = CommandType.StoredProcedure;
            Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(unidSolicitud);
            Dictionary<string, string> param = new Dictionary<string, string>(values);
            
            try
            {
                foreach (KeyValuePair<string, string> val in values)
                {
                    if (val.Value == null || val.Key.Contains("DPV") || val.Key.Contains("RFV"))
                        param.Remove(val.Key);
                }
                foreach (KeyValuePair<string, string> d in param)
                {
                     sp.Parameters.AddWithValue(d.Key, d.Value);
                }

                result = SrvDB.ExecuteCommand(sp);

                //if (result.Tables.Count == 1)
                //    mensaje = "Se ha guardado su solicitud.";
                //if (result.Tables.Count == 2)
                //    mensaje = result.Tables[0].Rows[0][0].ToString() + ": " + result.Tables[1].Rows[0][0].ToString();
                //if (result.Tables.Count == 3)
                //    mensaje = result.Tables[1].Rows[0][0].ToString() + "\n " + result.Tables[0].Rows[0][0].ToString() + "\n " + result.Tables[2].Rows[0][0].ToString();
                //if (result.Tables.Count == 0)
                //    mensaje = "No se ha podido guardar su solicitud. Error a nivel de BD sin excepción lanzada.";

                if (result.Tables.Count == 2) //ERROR
                    mensaje = result.Tables[0].Rows[0][0].ToString() + ": " + result.Tables[1].Rows[0][0].ToString();

                if (result.Tables.Count == 3) //ERROR
                    mensaje = result.Tables[1].Rows[0][0].ToString() + ": " + result.Tables[1].Rows[0][0].ToString();

                if (result.Tables.Count == 1) //INSERCION
                {
                    mensaje = Convert.ToString(result.Tables[0].Rows[0][0]);
                    //SolicitudRol sol = new SolicitudRol();
                    //sol.InsertRolStatus(values["unidSolicitud"], values["sol_unid_rol"], "3");
                }

                if (result.Tables.Count == 0) //ACTUALIZACION
                {
                    mensaje = "Actualización correcta";//regresa el unidSolicitud CUANDO ACTUALIZA
                    //SolicitudRol sol = new SolicitudRol();
                    //sol.InsertRolStatus(values["unidSolicitud"], values["sol_unid_rol"], "3");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return mensaje;
        }
        public static string InsertSolicitudWeb(string unidSolicitud)
        {
            DataSet result = new DataSet();
            SqlCommand sp = new SqlCommand("SP_CMD_UPSERT_SOL");
            sp.CommandType = CommandType.StoredProcedure;
            Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(unidSolicitud);
            //UpsertSolicitudWeb solweb= null;
            string mensaje = "";
            try
            {
                if (!values.ContainsKey("unidSolicitud") || !values.ContainsKey("sol_unid_rol"))
                    return "faltan datos";

                foreach (KeyValuePair<string, string> d in values)
                {
                     sp.Parameters.AddWithValue(d.Key, d.Value);
                }

                result = SrvDB.ExecuteCommand(sp);

                /*
                if(result.Tables.Count == 2) //ERROR
                    mensaje = result.Tables[0].Rows[0][0].ToString()+ ": "+result.Tables[1].Rows[0][0].ToString();

                if (result.Tables.Count == 3) //INSERCION
                {
                    mensaje = Convert.ToString(result.Tables[0].Rows[0][0]);
                    SolicitudRol sol = new SolicitudRol();
                    sol.InsertRolStatus(values["unidSolicitud"], values["sol_unid_rol"], "3");
                }

                if (result.Tables.Count == 0) //ACTUALIZACION
                {
                    mensaje = values["unidSolicitud"];//regresa el unidSolicitud CUANDO ACTUALIZA
                    SolicitudRol sol = new SolicitudRol();
                    sol.InsertRolStatus(values["unidSolicitud"], values["sol_unid_rol"], "3");
                }
                 * */

                if (result.Tables.Count == 2 ) //ERROR
                    mensaje = result.Tables[0].Rows[0][0].ToString() + ": " + result.Tables[1].Rows[0][0].ToString();

                if (result.Tables.Count == 3) //ERROR
                    mensaje = result.Tables[1].Rows[0][0].ToString() + ": " + result.Tables[1].Rows[0][0].ToString();

                if (result.Tables.Count == 1) //INSERCION
                {
                    mensaje = Convert.ToString(result.Tables[0].Rows[0][0]);
                    SolicitudRol sol = new SolicitudRol();
                    sol.InsertRolStatus(values["unidSolicitud"], values["sol_unid_rol"], "3");
                }

                if (result.Tables.Count == 0) //ACTUALIZACION
                {
                    mensaje = values["unidSolicitud"];//regresa el unidSolicitud CUANDO ACTUALIZA
                    SolicitudRol sol = new SolicitudRol();
                    sol.InsertRolStatus(values["unidSolicitud"], values["sol_unid_rol"], "3");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            //return  solweb.unidSolicitud.ToString();
            return mensaje;
            
        }
    
        public UpsertSolicitudWeb() 
        {
            unidSolicitud = "";
        }
        public UpsertSolicitudWeb(string unidSolicitud) 
        {
            this.unidSolicitud = unidSolicitud;
        }
    }
}
